当前位置:文档之家› 苏州科技学院javaee期末考试

苏州科技学院javaee期末考试

四、应用系统设计(60分)1.视图Input.java上是新闻系统发布表单,代码如下所示,设对应的接收请求Servlet文件名为Input.java,该Servlet将用户表单上提交的信息向客户端返加以便进行确认。

表单HTML代码:<form method=”post” action=”./input”>标题<input type=”text” name=”title”/><br/>作者<input type=”text” name=”authorname”/><br/>类别<input type=”radio” name=”category” value=”原创”/>原创<input type=”radio” name=”category” value=”转发”/>转发内容<textarea name=”context”/><br/>关键字<input type=”checkbox” name=”keyword” value=”音乐”/>社会<input type=”checkbox” name=”keyword” value=”旅游”/>经济<input type=”checkbox” name=”keyword” value=”电影”/>体育<input type=”checkbox” name=”keyword” value=”游泳”/>科技<br/>新闻发生地<select name=”local”><option value=”江苏”>江苏</option><option value=”上海” selected=”selected”>上海</option></select><br/><input type=”submit” name=”Submint” value=”提交”/><br/></form>试完成(共20分):(1)编写该Servlet(10分)(2)写出该Servlet的配置文件名和其中Servlet部分的配置;(5分)(3)输出中文乱码问题的解决方法。

(5分)解:(1)Input.java……..Public class Input extends HttpServlet{//在process方法中完成处理Protected void process(HttpServletRequest,HttpServletResponse response)Throws ServletException ,IOException{Stringtitile,autorname,categroy,context,keyword[],local;//新闻各项目String strkeyword="";//新闻关键字处理String format;//显示格式处理String returnStrNews;//返回新闻信息PrintWriter pw;//输出titile=request.getParameter("titile");//获取新闻标题autorname=request.getParameter("autorname");//获取新闻作者categroy=request.getParameter("categroy");//获取新闻类别context=request.getParameter("context");//获取新闻内容keyword=request.getParameterValues("keyword");//获取新闻关键字local=request.getParameter("local");//获取新闻发生地//处理新闻关键字for(String str :keyword){strkeyword+=str+",";}//添加显示格式format="标题:%s<br>"+"作者:%s<br>"+"类别:%s<br>"+"内容:%s<br>"+"关键字:%s<br>"+"新闻发生地:%s<br>";//处理好要返回客户端的新闻信息returnStrNews=String.format(format,titile,autorname,categroy,context,strkeyword);pw=response.getWriter();//响应pw.write(returnStrNews);//向客户端返回pw.flush();//刷新pw.close();//关闭}Public void doPost()HttpServletRequest,HttpServletResponse response)throws ServletException ,IOException{this. process (request, response); //此处完成调用process()方法}}(2)该Servlet的配置文件名是:web.xmlServlet部分的配置:<servlet><servlet-name> Input</servlet-name><servlet-class>包名. Input </servlet-class></servlet><servlet-mapping><servlet-name> Input </servlet-name><url-pattern>/input </url-pattern></servlet-mapping>(3)输出中文乱码问题的解决方法。

两种方法:一种写一个过滤器。

一种是在servlet里设置中文编码为GB2312.Request.setCharacterEncoding(“GB2312”);2.设上题的表单中,用户提交的数据要保存到Mysql的test数据库的表格news中,保存的内容分别是标题、作者、关键字、内容、新闻发生地,字段名与表单上的组件name 名相同。

按以下要求完成:(共16分)(1)写出创建该表的SQL语句,字段中包括主键id(自增字段);(2)修改上题中的Input.java中的process()方法,用JDBC保存数据,保存成功后转向Success.jsp; (10分)解:(1)SQL语句create table news(id int(11) primary key auto_increament;titile varchar(80),autorname varchar(40),keyword varchar(40),context varchar(1024),local varchar(40));(2)Input.javaPublic class input extends HttpServlet{//在process方法中完成处理Protected void process(HttpServletRequest,HttpServletResponse response)throws ServletException ,IOException{String titile,autorname,context,keyword[],local;//新闻各项目Connection con = null;//创建数据连接titile=request.getParameter("titile");//获取新闻标题autorname=request.getParameter("autorname");//获取新闻作者context=request.getParameter("context");//获取新闻内容keyword=request.getParameterValues("keyword");//获取新闻关键字local=request.getParameter("local");//获取新闻发生地//处理新闻关键字for(strkeyword:keyword){strkeyword+=strkeyword+",";}try{Class.forName("com.mysql.jdbc.Driver");//加载驱动器con = DriverManager.getConnection("jdbc:mysql://localhost:3306/studentDB?characterEncodi ng=utf-8","root","");PreparedStatement pstmt=conn.prepareStatement("insert into News(titile,autorname,context,keyword,local)values(?,?,?,?,?)");pstmt.setString(1,titile);pstmt.setString(2,autorname);pstmt.setString(3,context);pstmt.setString(4,keyword);pstmt.setString(5,local);int x = pstmt.executeUpdate();if(x >=1)result = true;}catch(Exception e){throw e;}finally{if(conn!=null){try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}if( result)request.getRequestDispatcher("Success.jsp").forward(request, response);//保存成功,转向Success.jsp代码}}3.假设题二的新闻发布是运行在Strus2框架下,表单的提交保存请求是由Action完成的,成功后要转向视图Success.jsp,试完成:(1)写出需要的实体类(可省略setter/getter方法):(2)写出实现保存新闻的该Action(Action类名为InputAction.java)(3)写出该Action的配置文件名和其中的Action解决:(1)实体类News.javapublic class News{private String titile;//标题private String autorname;//作者private String keyword;//关键字private String context;//内容private String local;//发生地public void News(){supser();}public void News(String titile,String autorname,String keyword,String context,String local){this.titile=titile;this.autorname=autorname;this.keyword=keyword;this.context=context;this.local=local;}}(2)InputAction.javaPublic class InputAction extends ActionSupport{Protected void addNews(News news){//这部分代码假设已完成,可直接调用} //需要完成的其他代码private News news;public News get News(){return news;}public void setNews(News news){this.news=news}public String execute() throws Exception {this. addNews(news);return SUCCESS;}}(3)Action 的配置文件名:Action 部分的配置内容如下:<action name="Input"class="包名.InputAction "method="Input"> <result name="success">/Success.jsp</result></action>4.请利用Hibenate框架,改写上题的InputAction 中protected void addNews(News news)方法,实现用户注册数据写入数据库(假设SessionFactory 类的类名为HiberanteSessionFactory,可直接使用),按下列要求完成:(共10)(1)设置Hiberante的POJO(即实体类)为News,写出News类与new表的关系映射在文件News.hbm.xml的配置内容;(2)改写InputAction.java中的protected void addNews(News news)方法,使用SessionFactory实现该方法。

相关主题